const mongoose = require('mongoose');

// mongodb连接
mongoose.connect(
  'mongodb://localhost:27017/test', {
    useNewUrlParser: true,
    useFindAndModify: false
  }
)

// 连接验证
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
  console.log('数据库连接成功');
});

// 创建schema
const peopleSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true //设置必填项
  },
  age: {
    type: Number,
    required: true
  }
})

// 创建一个类，相当于确定好接下来要操作的集合
// 该集合就是 参数第一个规则是大写转小写改为复数，然后生成这样名字的集合（tests）
//返回一个模型构造函数,
const People = mongoose.model('Test', peopleSchema);
//*****************************************
//*          #region/增加数据
//*****************************************
// const joe = new People({
//   name: 'joe',
//   age: 18
// });

// joe.save((err, result) => {
//   if (err) return '添加失败';

//   console.log(result);
// });
//*****************************************
//*         #endregion /增加数据
//*****************************************



//*****************************************
//*          #region/查询数据
//*****************************************
// People.find({
//     // age: {
//     //   $gte: 10,
//     //   $lte: 18
//     // }
//   },
//   (err, result) => {
//     if (err) return '查询失败'

//     console.log(result);
//   }
// )

//  可以使用where来替代,这样可以使用链式编程的方式，但是有点麻烦。。。
// People.where('age')
//   .gte(10)
//   .lte(18)
//   .exec((err, result) => {
//     if (err) return '查询失败';

//     console.log(result);
//   })
//*****************************************
//*          #endregion/查询数据
//*****************************************


//*****************************************
//*          #region/删除数据
//*****************************************
// 删除数据也有两个方法，一个是删除一条，一个是删除多条
// deleteMany he deleteOne
// People.deleteMany({
//   name: 'joe'
// }, (err, reslult) => {
//   if (err) return '删除数据失败';

//   console.log(`删除了${reslult.deletedCount}条数据`);
//    console.log(reslult);
//*****************************************
//*          #endregion/删除数据
//*****************************************


//*****************************************
//*          #region /更新数据
//*****************************************

// People.findOneAndUpdate({
//   _id: '5c51c20b49a903348cd9ee4a'
// }, {
//   name: 'sakura'
// }, (err, result) => {
//   if (err) return '更新数据失败';
//   console.log('更新的数据为');
//   console.log(result);
// })

People.findByIdAndUpdate('5c51c20b49a903348cd9ee4a', {
  name: 'joe'
}, (err, result) => {
  if (err) return '更新数据失败';
  console.log('更新的数据为');
  console.log(result);
});



// People.find({
//     _id: '5c51c20b49a903348cd9ee4a'
//   },
//   (err, result) => {
//     if (err) return '查询数据失败';
//     console.log('更新后该数据为');
//     console.log(result);
//   });
//*****************************************
//*          #endregion /更新数据
//*****************************************